package com.baizhi.yyl.util;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

// 配置文件
public class JdbcUtil {
	private static Properties prop = new Properties();
	// 静态代码块，读配置文件 只读1次
	static{
		try {
			// 获取配置文件的输入流
			InputStream is = JdbcUtil.class.getResourceAsStream("/com/baizhi/yyl/conf/db.properties");
			// 读文件
			prop.load(is);
		} catch (Exception e) {
			throw new RuntimeException(e);
		} finally {
			// 关流
		}
	}

	private static final ThreadLocal<Connection> tol = new ThreadLocal<Connection>();

	// 静态方法，创建连接
	public static Connection getCon(){
		// 获取线程局部变量的值
		Connection con = tol.get();

		// 判断当前线程中 是否已有连接对象 ， 没有 创建新连接 并存入线程局部变量
		if (con == null){
			// 获取配置文件中的内容
			String driver = prop.getProperty("mydriverclass");
			String myurl = prop.getProperty("myurl");
			String username = prop.getProperty("username");
			String password = prop.getProperty("password");
			try{
				// 注册驱动类
				Class.forName(driver);
				// 创建连接
				con = DriverManager.getConnection(myurl, username, password);
				// 把创建的新连接 存入线程局部变量
				tol.set(con);
				return con;
			} catch (Exception e) {
				throw new RuntimeException(e);
			}
		}
		return con;
	}

	// 静态方法，释放资源
	public static void release(ResultSet rs, Statement stm, Connection con){
		// 6 释放资源 rs stm con
		if (rs != null)
			try{ rs.close(); }catch(Exception e){throw new RuntimeException(e);}
		if (stm != null)
			try{ stm.close(); }catch(Exception e){throw new RuntimeException(e);}
		if (con != null)
			try{
				con.close();
				tol.remove();  // 如果连接是关闭状态 ，则必须 删除 线程局变量的值
			}catch(Exception e){
				throw new RuntimeException(e);
			}
	}
}
